# t.column :titulo,                 :string, :null => false, :limit => 128
# t.column :titulo_sanitizado,      :string, :null => false, :limit => 128
# t.column :texto,                  :string, :null => false, :limit => 1024
# t.column :created_at,             :datetime, :null => false
# t.column :updated_at,             :datetime, :null => false
# t.column :estado,                 :string, :null => false, :limit => 20

class Blog < ActiveRecord::Base
  acts_as_commentable
    
  #
  # estados
  #
  PUBLICADO   = 'publicado'
  BORRADOR    = 'borrador'
  
  has_many  :imagenes_blog,
            :class_name => 'ImagenBlog',
            :order => "imagenes_blogs.orden ASC"
    
  has_many  :imagenes,
            :through => :imagenes_blog,
            :source => :imagen
            
  #
  # validaciones
  #
  validates_presence_of :titulo,             :message => 'falta el título'
  validates_presence_of :texto,              :message => 'falta el texto del post'
  
  # call_backs
  before_create   :initialize_nicetitle
  before_create   :initialize_estado
  before_save     :update_updated_at
  
  
  def imagen_principal
    self.imagenes.first
  end
       
  def tiene_imagen?( imagen_id )
    # TODO: posible count_by_blog_id_and_imagen_id?
    ImagenBlog.count( :conditions => ["blog_id = #{self.id} and imagen_id = #{imagen_id}"] ) > 0
  end    
  
  def actualizar_imagenes( imagenes_ids )
    self.imagenes = []
    if not imagenes_ids.nil?
      imagenes_ids.each do |imagen_id|
        self.imagenes << Imagen.find_by_id( imagen_id )
      end
    end
  end
  
  protected
    def initialize_nicetitle
      self.titulo_sanitizado = self.titulo.to_slug
    end
    
    def initialize_estado
      self.estado ||= Blog::BORRADOR
    end
    
    def update_updated_at
      self.updated_at = Time.now
    end
  
end